// import { bool } from './../../node_modules/@types/prop-types/index.d';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls';
// import { Camera, MOUSE, TOUCH, Vector3 } from 'three';
export interface IChild {
    isFace:boolean;
    isSolid:boolean;
    visible:boolean;
    needsUpdate:boolean;
}
export interface ImouseButtons {
    LEFT:number;
    MIDDLE:number;
    RIGHT:number;
}
export interface IControl extends OrbitControls {
    enableDamping:boolean;
    enableZoom:boolean;
    autoRotate:boolean;
    minPolarAngle:number;

    rotateSpeed:number;
    panSpeed:number;
    maxPolarAngle:number;
    enablePan:boolean;
    enableRotate:boolean;
    staticMoving?:boolean; 
    // mouseButtons:ImouseButtons;
    // Partial<ImouseButtons> generates a new type based on ImouseButtons with all the property keys being optional
    mouseButtons: Partial<ImouseButtons>;
    


}

export interface IBControl extends TrackballControls {
    enableDamping?:boolean;
    enableZoom?:boolean;
    autoRotate?:boolean;
    minPolarAngle?:number;

    rotateSpeed:number;
    panSpeed:number;
    maxPolarAngle?:number;
    enablePan?:boolean;
    enableRotate?:boolean;
    staticMoving:boolean; 
    mouseButtons: ImouseButtons
    


}
// export interface IControl extends OrbitControls,TrackballControls {
//     enableDamping:boolean;
//     enableZoom:boolean;
//     autoRotate:boolean;
//     minPolarAngle:number;

//     rotateSpeed:number;
//     panSpeed:number;
//     maxPolarAngle:number;
//     enablePan:boolean;
//     enableRotate:boolean;
//     staticMoving?:boolean; 
//     // mouseButtons:ImouseButtons;
//    mouseButtons: Partial<ImouseButtons>;
 // Partial<ImouseButtons> generates a new type based on ImouseButtons with all the property keys being optional
//     keys?: { LEFT: string; UP: string; RIGHT: string; BOTTOM: string };
//     domElement: HTMLElement | Document;

//     addEventListener(type: string, listener: (event: any) => void): void;
//     dispatchEvent(event: { type: string; target: any }): void;
//     removeEventListener(type: string, listener: (event: any) => void): void;
//     hasEventListener(type: string, listener: (event: any) => void): boolean;
//     update(): boolean;



// }
// export interface PControl clone 